// 这是一个最简单的日志中间件：每次有请求进来时，打印一条日志再放行
// Import 说明：
// - Injectable: 告诉 Nest 这是一个可被依赖注入系统管理的类
// - NestMiddleware: 中间件需要实现的接口（规定要有 use 方法）
import { Injectable, NestMiddleware } from '@nestjs/common';
// Express 类型说明：NestJS 默认基于 Express 运行，这里用它的类型来标注入参
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
	// 关于 implements：
	// “implements NestMiddleware” 表示这个类承诺“遵守”NestMiddleware 接口的规范。
	// 具体来说，就是必须实现一个 use(req, res, next) 方法；
	// 只要方法签名对得上，Nest 就能把它当作中间件来调用。

	/*
	use 方法是中间件需要实现的唯一约定方法：
	- req: Request    当前这次 HTTP 请求对象（包含 headers、query、params、body 等）
	- res: Response   服务端的响应对象（可以用来返回数据）
	- next: NextFunction  一个回调函数；调用它表示“当前中间件处理完了，请交给下一个中间件或控制器继续处理”

	注意：如果不调用 next()，请求会被卡住，客户端迟迟收不到响应。
	*/
	use(req: Request, res: Response, next: NextFunction) {
		// 放行，交给后续中间件/路由处理
		next();
	}
}
